// <copyright file="CacheItemPolicy.cs" company="Microsoft">
//   Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
// </copyright>
using System;
using System.Collections.ObjectModel;

namespace System.Runtime.Caching {
    public class CacheItemPolicy {
        private DateTimeOffset _absExpiry;
        private TimeSpan _sldExpiry;
        private Collection<ChangeMonitor> _changeMonitors;
        private CacheItemPriority _priority;
        private CacheEntryRemovedCallback _removedCallback;
        private CacheEntryUpdateCallback _updateCallback;

        public DateTimeOffset AbsoluteExpiration { 
            get { return _absExpiry; } 
            set { _absExpiry = value; } 
        }

        public Collection<ChangeMonitor> ChangeMonitors {
            get { 
                if (_changeMonitors == null) {
                    _changeMonitors = new Collection<ChangeMonitor>();
                }
                return _changeMonitors;
            } 
        }

        public CacheItemPriority Priority { 
            get { return _priority; } 
            set { _priority = value; } 
        }

        public CacheEntryRemovedCallback RemovedCallback {
            get { return _removedCallback; }            
            set { _removedCallback = value; }
        }

        public TimeSpan SlidingExpiration { 
            get { return _sldExpiry; } 
            set { _sldExpiry = value; } 
        }

        public CacheEntryUpdateCallback UpdateCallback {
            get { return _updateCallback; }
            set { _updateCallback = value; }
        }

        public CacheItemPolicy() {
            _absExpiry = ObjectCache.InfiniteAbsoluteExpiration;
            _sldExpiry = ObjectCache.NoSlidingExpiration;
            _priority = CacheItemPriority.Default;
        }
    }
}
